package com.langangkj.home.cloud.generator.properties;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * @author ZhouChuGang
 * @version 1.0
 * @project home-cloud
 * @date 2020/3/26 20:31
 * @Description mybatis代码生成工具属性配置文件
 */
@Slf4j
@Data
@ConfigurationProperties(MybatisGeneratorProperties.PREFIX)
public class MybatisGeneratorProperties {
    public static final String PREFIX = "generator";

    /**
     * 保存的文件位置
     * 相对于主项目的路径
     */
    private String basePath;

    /**
     * 作者
     */
    private String author;

    /**
     * 生成后是否打开
     */
    private boolean open = false;


    /**
     * 数据连接的url
     */
    private String url;

    /**
     * 数据库驱动
     */
    private String driverName = "com.mysql.cj.jdbc.Driver";

    /**
     * 数据库用户账号
     */
    private String userName;
    /**
     * 数据库密码
     */
    private String passWord;

    /**
     * 全包名
     */
    private String parent;

    /**
     * map xml 输出文件路径 如果为空 则为resource目录下的mapper文件夹  后面会拼接  entity + Mapper.xml
     */
    private String mapperXmlOutputPath;

    /**
     * controller 层的模块名
     */
    private String moduleName;

    /**
     * 实体类都要继承的类的全类名 可以为空
     */
    private String superEntityClass;

    /**
     * 实体类的父类跟实体类 具有的相同属性
     * 一旦配置实体类此字段会给父类
     */
    private String[] superEntityColumns;

    /**
     * 通用mapper的父类  所有mapper都会继承
     */
    private String superMapperClass;

    /**
     * 通用Iservice的父类  所有都会继承
     */
    private String superServiceClass;

    /**
     * 通用serviceImpl的父类  所有都会继承
     */
    private String superServiceImplClass;

    /**
     * 控制器都要继承的类的全类名  可以为空
     */
    private String superControllerClass;

    /**
     * 生成的controller 为 restController风格
     */
    private boolean restControllerStyle = false;

    /**
     * 要生成的表名 包含的表名
     * 与 exclude likeTable  互斥 只能二选一
     */
    private String[] include;

    /**
     * 需要排除的表名 即不处理的表名
     */
    private String[] exclude;

    /**
     * 需要生成代码的表名 为 %table_name%  查询
     * 与 include notLikeTable  互斥 只能二选一
     */
    private String likeTable;

    /**
     * 需要排除生成代码的表名  %table_name%  查询
     * 与 include 精准匹配互斥
     */
    private String notLikeTable;

    /**
     * 生成实体类时 是否加入注解
     */
    private boolean entityTableFieldAnnotationEnable = true;

    /**
     * 开启二级缓存
     */
    private boolean enableCache = false;

    /**
     * xml开启 baseResultMap
     */
    private boolean baseResultMap = false;

    /**
     * 是否覆盖已有文件
     */
    private boolean fileOverride = false;

    /**
     * 是否生成 controller层的代码    默认不生成
     */
    private boolean generatorControllerCode = false;

    /**
     * 是否生成service层的代码  默认不生成
     */
    private boolean generatorServiceCode = false;

    /**
     * 逻辑删除字段名
     */
    private String logicDeleteFieldName;

    /**
     * 表名的前缀 这样生成的实体会自动没有这个前缀
     */
    private String tablePrefix;

}
